package Exercise;

import java.util.Scanner;

public class demo6 {

    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt();
        int n = scanner.nextInt();
        int ret=func(m,n);
        System.out.println(ret);
    }

    public static int func(int m, int n){
        if(m<n) return 0;
        if(n==0) return 1;//（两个同样需求的人（比如都是租鞋或都是还鞋）交换位置是同一种排法）
        return func(m-1,n)+func(m,n-1);//刚开始必须有人先还鞋 所以func(m-1,n)写在前面
    }
}


/**末名湖边的烦恼
 *
 * 思路分析：
 *
 * 1.为了使每个借鞋的人都能借到鞋，必须满足几个条件：
 * 1）还鞋的人数m > 借鞋的人数n
 * 2）刚开始必须有人先还鞋
 * 2.每次窗口处理要么是还鞋，要么是借鞋的这两种情况:
 * 1）还鞋的：m-1
 * 2）借鞋的：n-1
 * 3.递归关系
 * 1)func(m,n)方法表示m个还鞋的，n个借鞋的，返回总共多少种排队方案，根据第二步的分析，每次都有两种选择:还鞋、借鞋，所以方案总数就等于：
 * 先还鞋子的方案+先借鞋子的方案,即func(m,n)=func(m-1,n)+func(m,n-1)
 * 由第一步所分析的可知:
 * ①m<n func(m,n)=0
 * ②n==0 func(m,n)=1//没人借鞋那无论多少人还鞋都是一种方案
 */